Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 <<   zurück
Visual Basic 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual Basic 2005

Visual Basic 2005
1.233 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-585-1
gp Kapitel 26 Datenbankzugriff mit ADO.NET
  gp 26.1 Eine kleine Einführung
  gp 26.2 Die Verbindung zu einer Datenquelle herstellen
    gp 26.2.1 Der Inhalt der Verbindungszeichenfolge
    gp 26.2.2 Die Authentifizierung
    gp 26.2.3 Das Öffnen einer Verbindung
    gp 26.2.4 Schließen einer Verbindung
    gp 26.2.5 Die Dauer des Verbindungsaufbaus
    gp 26.2.6 Eigenschaften eines »Connection«-Objekts
    gp 26.2.7 Die Ereignisse eines »Connection«-Objekts
    gp 26.2.8 Unterstützung bei Projekten mit grafischer Benutzeroberfläche
  gp 26.3 Das »Command«-Objekt
    gp 26.3.1 Erzeugen eines »Command«-Objekts
    gp 26.3.2 Ausführen des »Command«-Objekts
    gp 26.3.3 Aktionsabfragen mit »ExecuteNonQuery« absetzen
    gp 26.3.4 Auswahlabfragen mit »ExecuteReader«
    gp 26.3.5 Abfragen, die genau ein Ergebnis liefern
    gp 26.3.6 Parametrisierte Abfragen
    gp 26.3.7 Die Unterstützung des Visual Studios 2005
  gp 26.4 Der »DataAdapter« als Bindeglied zwischen Datenbank und verbindungslosen Objekten
    gp 26.4.1 Die Konstruktoren der Klasse »DataAdapter«
    gp 26.4.2 Den lokalen Datenspeicher mit der Methode »Fill« füllen
    gp 26.4.3 Abrufen von Schemainformationen
    gp 26.4.4 Die Unterstützung des Visual Studios 2005
  gp 26.5 Das »DataSet«-Objekt
    gp 26.5.1 Allgemeines
    gp 26.5.2 Ein »DataSet«-Objekt erzeugen
    gp 26.5.3 Das DataSet füllen
    gp 26.5.4 Tabellen- und Spaltenbezeichner zuordnen
  gp 26.6 »DataTable«-Objekte
    gp 26.6.1 Die Zeilen und Spalten in einer »DataTable«
    gp 26.6.2 Mit mehreren Tabellen arbeiten
    gp 26.6.3 Änderungen an einer »DataTable« vornehmen
    gp 26.6.4 Datenausgabe in WinForms mit dem Visual Studio 2005
  gp 26.7 Aktualisieren der Datenbank
    gp 26.7.1 Aktualisieren mit dem »CommandBuilder«-Objekt
    gp 26.7.2 Manuell gesteuerte Aktualisierungen
    gp 26.7.3 Aktualisieren mit »ExecuteNonQuery«
    gp 26.7.4 Manuelles Aktualisieren mit dem DataAdapter
    gp 26.7.5 Den zu aktualisierenden Datensatz in der Datenbank suchen
    gp 26.7.6 Den Benutzer über die fehlgeschlagenen Aktualisierungen informieren
    gp 26.7.7 Die konfliktverursachenden Datenzeilen bei der Datenbank abfragen


Galileo Computing

26.2 Die Verbindung zu einer Datenquelle herstellen  downtop

Wollen Sie aus einer Anwendung heraus auf eine Datenbank zugreifen, ist die erste zu treffende Entscheidung die des eingesetzten Datenproviders. Für die providerspezifischen Klassen ist jeweils ein separater Namespace in der .NET-Klassenbibliothek vorgesehen. Thema dieses Abschnitts ist der Aufbau einer Verbindung zum SQL Server unter Einsatz des SqlClient-Datenproviders. Daher sollten Sie mit


Imports System.Data.SqlClient

den entsprechenden Namespace zuerst bekannt geben.

Die Verbindung zu einer Datenbank wird durch ein Connection-Objekt beschrieben. Um präzise zu sein, gibt es die Klasse Connection unter ADO.NET nicht. Stattdessen wird, abhängig vom verwendeten .NET-Datenprovider, ein Präfix vorangestellt. Benutzen Sie den SqlClient-Datenprovider, heißt die Klasse SqlConnection, beim OleDb-Datenprovider OleDbConnection.

Um auf eine Datenquelle wie den Microsoft SQL Server zuzugreifen, werden mehrere Informationen benötigt:

gp  der Name des Rechners, auf dem die SQL Server-Instanz läuft
gp  der Name der Datenbank, deren Dateninformationen ausgewertet oder manipuliert werden sollen
gp  Anmeldeinformationen, mit denen sich der Anwender authentifiziert

Diese Verbindungsinformationen werden nach einem bestimmten Muster in einer Zeichenfolge zusammengefasst, die als Verbindungszeichenfolge bezeichnet wird. Grundsätzlich haben Sie zwei Möglichkeiten, die Verbindungsinformationen zu einer Datenquelle anzugeben:

gp  Sie rufen den parameterlosen Konstruktor der Connection-Klasse auf und übergeben der Eigenschaft ConnectionString des erzeugten Objekts die Verbindungsinformationen.
gp  Sie rufen einen parametrisierten Konstruktor auf.

Sehen wir uns zuerst den Verbindungsaufbau mit dem parameterlosen Konstruktor an.


Dim con As New SqlConnection

Damit erzeugen wir bereits das Verbindungsobjekt, das aber noch sehr dumm ist, da ihm sämtliche Informationen fehlen, die zum Aufbau der Verbindung zu einer Datenquelle notwendig sind. Diese müssen der Eigenschaft ConnectionString des Connection-Objekts zugewiesen werden:


Dim con As New SqlConnection
con.ConnectionString = "<Verbindungszeichenfolge>"

Der parametrisierte Konstruktor gestattet es, die Verbindungszeichenfolge als Argument zu übergeben.


Dim con As SqlConnection = _
New SqlConnection("<Verbindungszeichenfolge>")


Galileo Computing

26.2.1 Der Inhalt der Verbindungszeichenfolge  downtop

Alle Informationen, die zum Aufbau einer Verbindung zu einer Datenquelle erforderlich sind, werden in der Verbindungszeichenfolge beschrieben. Eine Verbindungszeichenfolge besteht aus einer Reihe von Attributen, denen Werte zugewiesen werden. Die Attribute sind untereinander durch ein Semikolon getrennt. Die allgemeine Syntax lässt sich wie folgt beschreiben:


Dim strCon As String = _
"Attribut1=Wert1;Attribut2=Wert2;Attribut3=Wert3;..."

Die Bezeichner der einzelnen Attribute sind festgelegt und hängen vom verwendeten .NET-Datenprovider ab. In der folgenden Tabelle sind die des SqlClient-Datenproviders aufgeführt. Die Groß-/Kleinschreibung spielt dabei ebenso wenig eine Rolle wie die Reihenfolge der Attribute. Beachten Sie, dass es meistens mehrere Attributbezeichner gibt, die gleichwertig benutzt werden können.


Tabelle 26.1     Attribute der Verbindungszeichenfolge des SQL-Datenproviders

Schlüssel Beschreibung
Connect Timeout, Connection Timeout Dieser Schlüssel beschreibt die Zeitdauer in Sekunden, die auf eine Verbindung zum Server gewartet werden soll, bevor der Versuch abgebrochen und ein Fehler generiert wird. Der Standardwert beträgt 15 Sekunden.
Data Source, Server, Address, Addr, Network Address Entweder der Name oder die Netzwerkadresse der Instanz des SQL Servers, mit dem eine Verbindung hergestellt werden soll.
Initial Catalog, Database Hier wird der Name der Datenbank angegeben.
Integrated Security, Trusted_Connection Bei False werden die Benutzer-ID und das Kennwort für die Verbindung angegeben. Bei True werden die aktuellen Anmeldeinformationen des Windows-Kontos für die Authentifizierung verwendet. Gültige Werte sind True, False, yes, no und sspi, das äquivalent zu True ist. Die .NET-Dokumentation empfiehlt, sspi zu benutzen.
Packet Size Gibt die Größe der Netzwerkpakete in Byte an, die zum Kommunizieren mit einer Instanz von SQL Server verwendet werden. Die Standardgröße eines Pakets beträgt 8192 Byte, kann aber zwischen 512 und 32767 variieren.
Password, Pwd Das Kennwort für das SQL Server-Konto.
User ID Das SQL Server-Anmeldekonto.
Workstation ID Der Name des Computers, der mit dem SQL Server eine Verbindung aufbauen möchte.

Beabsichtigen Sie, auf den lokal installierten SQL Server und dessen Beispieldatenbank pubs zuzugreifen, könnte die Verbindungszeichenfolge wie folgt lauten:


Dim con As New SqlConnection
con.ConnectionString = "Data Source=(local);" & _
"Initial Catalog=pubs;" & _
"Trusted_Connection=yes"

Data Source beschreibt den Namen des Rechners, auf dem sich die laufende SQL Server-Instanz befindet. Handelt es sich dabei um den lokalen Rechner, dürfen Sie anstatt des Rechnernamens auch (local), localhost oder einfach nur einen Punkt angeben – die beiden letztgenannten allerdings ohne runde Klammern. Hinter Initial Catalog ist die Datenbank angegeben, zum Schluss folgen noch Informationen zur Authentifizierung.


Hinweis

Setzen Sie in der Verbindungszeichenfolge keine unnötigen Leerzeichen, auch wenn das aus Ihrer Sicht die Lesbarkeit verbessert. Der .NET-Datenprovider wird nämlich versuchen, die Leerzeichen zu interpretieren mit der Folge, dass ein Laufzeitfehler auftritt, weil beispielsweise der Rechner oder die Datenbank nicht gefunden werden.


Sie müssen nicht zwangsläufig alle Attribute verwenden. Das Attribut Packet Size wird oben beispielsweise nicht verwendet. Somit werden alle Daten auf der Verbindung in 8192 Byte großen Paketen verschickt. Müssen große Datenmengen vom Server geladen werden, z.  B. Bilder, können größere Pakete die Leistung durchaus deutlich steigern.


Galileo Computing

26.2.2 Die Authentifizierung  downtop

Soll die Verbindung zu einer Datenbank aufgebaut werden, muss sich der Anwender bei der Datenbank einloggen. Das Connection-Objekt benutzt hierfür die Authentifizierungsinformationen, die in der Verbindungszeichenfolge enthalten sind. Diese werden vom Datenbankserver überprüft.

Der SQL Server kennt zwei Verfahren zur Authentifizierung:

gp  die integrierte Windows-Authentifizierung
gp  die SQL Server-Authentifizierung

Bei der integrierten Windows-Authentifizierung muss weder ein Benutzername noch ein Passwort explizit gesendet werden. Mit der Angabe von Trusted_Connection=yes verwendet das System automatisch das Windows-Benutzerkonto des aktuellen Users bestehend aus Benutzername und Passwort und reicht es an den SQL Server weiter. Vorausgesetzt der Kontoinhaber hat ausreichende Rechte, wird eine Verbindung zur Datenbank hergestellt.

Die SQL Server-Authentifizierung setzt voraus, dass der Administrator des SQL Servers ein Benutzerkonto mit Passwort eingerichtet hat. Sowohl der Benutzername als auch das Passwort müssen bei diesem Authentifizierungsverfahren in der Verbindungszeichenfolge stehen, z.  B.:


Dim con As New SqlConnection
con.ConnectionString = "Data Source=DBServer;" & _
"Initial Catalog=pubs;" & _
"User ID=Testuser;" & _
"Password=26gf28"

Der SQL Server führt die Authentifizierung durch, indem er überprüft, ob ein SQL Server-Anmeldekonto mit diesem Namen eingerichtet ist und ob das angegebene Kennwort stimmt. Falls die übermittelten Anmeldeinformationen falsch sind, misslingt die Authentifizierung, und der Benutzer erhält eine Fehlermeldung.

Es ist grundsätzlich nicht empfehlenswert, die Daten zur Benutzerauthentifizierung in der Verbindungszeichenfolge zu speichern. Besser ist es, den Anwender zur Eingabe von Benutzernamen und Passwort aufzufordern und mit diesen Informationen zur Laufzeit die Verbindungszeichenfolge zu bilden.


Galileo Computing

26.2.3 Das Öffnen einer Verbindung  downtop

Das Instanziieren der Klasse SqlConnection und die Bekanntgabe der Verbindungszeichenfolge sind noch nicht ausreichend, um die Verbindung zu einer Datenbank tatsächlich zu öffnen und auf die in ihr enthaltenen Daten zuzugreifen. Dazu muss noch die Methode Open auf das Connection-Objekt aufgerufen werden:


con.Open()

Weist die Verbindungszeichenfolge keinen Fehler auf, könnten Sie nun auf die Daten von pubs zugreifen. Es gibt allerdings eine Reihe potenzieller Fehlerquellen, die zu einem Laufzeitfehler beim Verbindungsaufbau führen können:

gp  Ein Fehler in der Verbindungszeichenfolge
gp  Der Anwender hat keine Zugriffsrechte auf die Datenbank.
gp  Der SQL Server ist nicht gestartet.
gp  Der Rechner, auf dem die SQL Server-Instanz läuft, ist im Netzwerk nicht erreichbar.

Sie sollten daher das Öffnen einer Datenbankverbindung immer in einen Fehlerbehandlungsblock einschließen.


Try
Dim con As SqlConnection = _
New SqlConnection("Data Source=localhost;" & _
"Initial Catalog=pubs;Trusted_Connection=yes")
con.Open()
Catch e As Exception
' Anweisungen
End Try


Galileo Computing

26.2.4 Schließen einer Verbindung  downtop

Man könnte der Meinung sein, dass eine geöffnete Verbindung geschlossen wird, wenn das Connection-Objekt aufgegeben wird. Das wäre zum Beispiel der Fall, wenn die Referenz des Connection-Objekts auf Nothing gesetzt wird oder die Objektvariable ihren Gültigkeitsbereich verlässt. Das stimmt aber nur aus Sicht des zugreifenden Prozesses, denn tatsächlich werden auch auf dem Datenbankserver Ressourcen für die Verbindung reserviert, die nicht freigegeben werden, wenn das Connection-Objekt nur aufgegeben, aber noch nicht vom Garbage Collector bereinigt wird. Sie sollten daher immer so schnell wie möglich eine geöffnete Verbindung durch Aufruf der Close-Methode auf das Connection-Objekt wieder schließen.


...
con.Open()
' Anweisungen
con.Close()


Galileo Computing

26.2.5 Die Dauer des Verbindungsaufbaus  downtop

Standardmäßig wird 15 Sekunden lang versucht, die Verbindung erfolgreich aufzubauen. Verstreicht diese Zeit, ohne dass der Datenbankserver erreicht wird, wird eine Ausnahme ausgelöst. Äußere Umstände wie die Netzwerk- oder Serverbelastung können dazu führen, dass diese Zeitspanne unter Berücksichtigung aller Umstände zu knapp bemessen ist. In der Verbindungszeichenfolge kann daher mit Hilfe des Attributs Connect Timeout (bzw. Connection Timeout) eine andere Zeitspanne eingestellt werden. Die Angabe erfolgt in Sekunden, z.  B.:


Dim con As SqlConnection = _
New SqlConnection("Data Source=localhost;" & _
"Initial Catalog=pubs;Connect Timeout=30;" & _
"Trusted_Connection=yes")

Das Connection-Objekt verfügt auch über eine Eigenschaft ConnectionTimeout, die allerdings schreibgeschützt ist. Ihr kann daher auch keine vom Standard abweichende Zeitspanne zugewiesen werden.


Galileo Computing

26.2.6 Eigenschaften eines »Connection«-Objekts  downtop

Neben der bereits behandelten Eigenschaft ConnectionString veröffentlichen die Connection-Klassen noch weitere Eigenschaften und Methoden. Wir wollen uns diese jetzt ansehen. Einige davon sind providerspezifisch.


Tabelle 26.2     Die Eigenschaften eines »SqlConnection«-Objekts

Eigenschaft Beschreibung
ConnectionString Enthält alle Informationen zum Verbindungsaufbau.
ConnectionTimeout (schreibgeschützt) Ruft die Zeitspanne ab, die dem Versuch zum Aufbau der Verbindung zu einer Datenquelle zugestanden wird. Zu beachten ist, dass nicht alle Datenbanken dieses Feature unterstützen.
Database (schreibgeschützt) Bei Datenquellen, die mehrere Datenbanken unterstützen (z.  B. SQL Server), liefert diese Eigenschaft den Namen der Datenbank.
DataSource (schreibgeschützt) Bei dateibasierten Datenbanken (z.  B. MS Access) liefert diese Eigenschaft den Pfad zur Datenbank, bei serverbasierten Datenquellen den Namen des Rechners, auf dem der Server installiert ist.
PacketSize (schreibgeschützt, nur SqlConnection) Gibt die verwendete Paketgröße für die Kommunikation mit dem Datenbankserver über das Netzwerk zurück.
ServerVersion (schreibgeschützt) Liefert die Versionsnummer des verwendeten Servers. Das Abrufen dieser Eigenschaft ist beispielsweise dann sinnvoll, wenn ein bestimmtes Feature erst ab einer bestimmten Version zur Verfügung steht.
State (schreibgeschützt) Beschreibt den aktuellen Zustand der Verbindung.
WorkstationID (schreibgeschützt, nur SqlConnection) Gibt den Netzwerknamen des Clientrechners zurück.

Bis auf die Eigenschaft ConnectionString sind alle anderen schreibgeschützt und liefern größtenteils nur die Werte zurück, die der Verbindungszeichenfolge über die Attribute übergeben werden.


Galileo Computing

26.2.7 Die Ereignisse eines »Connection«-Objekts  downtop

Mit InfoMessage und StateChange besitzt das Connection-Objekt nur zwei Ereignisse.

Das Ereignis »InfoMessage«

Bei auftretenden Problemen gibt der SQL Server eine Informationsmeldung an den Aufrufer zurück, die das Problem beschreibt. Ein Problem kann mehr oder weniger schwerwiegend sein. Um es genauer zu beschreiben, unterscheidet der SQL Server Fehler in ihrem Schweregrad und definiert dazu 25 Stufen. Der Schweregrad 0 bis 10 steht ausschließlich für Informationsmeldungen zur Verfügung. Fehler des Schweregrads 11 bis 16 kann ein Anwender selbst beheben, ab Schweregrad 17 muss der Datenbankadministrator aktiv werden.

Das InfoMessage-Ereignis wird ausgelöst, wenn vom SQL Server eine Meldung mit einem Schweregrad von 10 oder weniger zurückgegeben wird.

Das Ereignis »StateChange«

StateChange tritt auf, wenn sich die State-Eigenschaft ändert, die den aktuellen Zustand der Verbindung beschreibt. Im Ereignishandler können Sie die Eigenschaften OriginalState und CurrentState des Args-Objekts auswerten, um den alten und neuen Zustand der Verbindung zu überprüfen.


Module Module1
Sub Main()
...
AddHandler con.StateChange, AddressOf con_StateChange
con.Open()
con.Close()
End Sub
Sub con_StateChange(ByVal obj As Object, _
ByVal e As StateChangeEventArgs)
Console.Write("Zustand: von {0}", e.OriginalState)
Console.WriteLine(" nach {0}", e.CurrentState)
End Sub
End Module


Galileo Computing

26.2.8 Unterstützung bei Projekten mit grafischer Benutzeroberfläche  toptop

Sie wissen jetzt, wie Sie mittels Code die Verbindung zu einer Datenquelle herstellen können. Entwickeln Sie eine Konsolenanwendung, müssen Sie so verfahren, wie es die letzten Abschnitte gezeigt haben. Einfacher wird es, wenn Sie eine Anwendung mit grafischer Benutzeroberfläche erstellen, z.  B. eine Windows-Anwendung oder eine ASP.NET-Webanwendung. Anwendungen mit einer GUI-Schnittstelle genießen den Vorzug, dass die Entwicklungsumgebung des Visual Studios 2005 dem Designer mehrere Features zur Verfügung stellt, die mit ihrem Automatismus deutlich zur Vereinfachung der Programmierung beitragen. An dieser Stelle möchte ich Ihnen zunächst das zur Aufnahme einer Verbindung zu einer Datenquelle vorstellen. Andere Tools werden an späterer Stelle noch folgen.

Eine Verbindung mit einem Steuerelement herstellen

Um eine Verbindung zu einer Datenbank herzustellen, können Sie das SqlConnection-Steuer-element benutzen, das Sie allerdings zuvor der Toolbox hinzufügen müssen. Ziehen Sie in bekannter Weise das gewünschte Steuerelement in den aktiven Designer, wird es im Komponentenfach abgelegt. Danach muss die Verbindungszeichenfolge festgelegt werden. Markieren Sie dazu im Eigenschaftsfenster die Eigenschaft ConnectionString, und klicken Sie in der Wertespalte auf die Schaltfläche mit dem nach unten zeigenden Pfeil. Es öffnet sich ein kleines Auswahlfenster, in dem Sie den Eintrag <Neue Verbindung...> finden. Klicken Sie darauf, sehen Sie den Dialog Verbindung hinzufügen. Tragen Sie hier den Server ein, geben dann die Authentifizierungsdaten an und wählen die Datenbank aus, auf deren Daten Sie zugreifen möchten. Sie können sogar noch die Verbindung abschließend testen.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 26.1     Dialog zum Aufbau einer Datenbankverbindung


Hinweis

Sollten die Beispielprogramme, die sich auf der Buch-CD befinden, auf Ihrem Rechner nicht funktionieren, sollten Sie sich die Verbindungszeichenfolge ansehen und entsprechend anpassen.


 <<   zurück
  
  Zum Katalog
Zum Katalog: Visual Basic 2005
Visual Basic 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual C# 2005






 Visual C# 2005


Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Das Programmierhandbuch SQL Server 2005






 Das Programmier-
 handbuch
 SQL Server 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de